package main

import (
	"database/sql"
	"fmt"
	"log"
	"os"
	"path/filepath"

	_ "github.com/mattn/go-sqlite3"
)

// GetFileExtension 从 FileInfo 中获取文件的扩展名
func getFileExtension(info os.FileInfo) string {
	return filepath.Ext(filepath.Base(info.Name()))
}

func StringInSlice(s string, slice []string) bool {
	for _, str := range slice {
		if str == s {
			return true
		}
	}
	return false
}
func BuildSQLite() {
	// 连接 SQLite 数据库
	db, err := sql.Open("sqlite3", "./files.db")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	// 创建表
	_, err = db.Exec("CREATE TABLE IF NOT EXISTS files (filekey TEXT PRIMARY KEY, type TEXT, content TEXT, file BLOB)")
	if err != nil {
		log.Fatal(err)
	}

	// 遍历目录
	err = filepath.Walk("./obweb", func(path string, info os.FileInfo, err error) error {
		if err != nil {
			return err
		}
		if !info.IsDir() {
			// 读取文件内容
			content, err := os.ReadFile(path)
			if err != nil {
				return fmt.Errorf("无法读取文件 %s: %v", path, err)
			}

			// 获取相对路径作为 filekey
			filekey, err := filepath.Rel("./obweb", path)
			if err != nil {
				return fmt.Errorf("无法计算相对路径 %s: %v", path, err)
			}

			// 插入数据到数据库
			ext := getFileExtension(info)
			plainExt := []string{".md", ".text", ".json", ".xml", ".html", ".txt"}
			if StringInSlice(ext, plainExt) {
				_, err = db.Exec("INSERT INTO files(filekey, type, content) VALUES(?, ?, ?)", filekey, "plain", string(content))
				if err != nil {
					return fmt.Errorf("无法插入数据 %s: %v", path, err)
				}
			} else {
				_, err = db.Exec("INSERT INTO files(filekey, type, file) VALUES(?, ?, ?)", filekey, "file", content)
				if err != nil {
					return fmt.Errorf("无法插入数据 %s: %v", path, err)
				}
			}

		}
		return nil
	})

	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("所有文件已成功导入数据库")
}
